import http from 'wechat-http'

// 接口基础地址
http.baseURL = 'https://live-api.itheima.net'


// 配置请求拦截器
http.intercept.request = function (options) {
  // 扩展头信息
  const defaultHeader = {}
  // 身份认证
  defaultHeader.Authorization = 'Bearer ' + getApp().token
  // 与默认头信息合并
  options.header = Object.assign({}, defaultHeader, options.header)
  // 处理后的请求参数
  return options
}

// 响应拦截器
http.intercept.response = async (res) => {
  // console.log(res)
  //res.statusCode 响应状态码
  // 10000 业务正确
  const { code, message, data } = res.data
  if (code === 10000) {
    return data
  } else {
    if (code === 401) {
      //验证token过期了
      //刷新token，更换新的验证token（拿着app.refreshToken调用/refreshToken调用）
      const app = getApp()
      wx.request({
        url: http.baseURL + '/refreshToken',
        method: 'post',
        header: {
          Authorization: 'Bearer ' + app.refreshToken
        },
        success: (data) => {
          console.log(data);
          if (data.data.code === 401) {
            //刷新token也过期了。重新登录
            //token都被清除了
            app.setToken('token', '')
            app.setToken('refreshToken', '')
            let currentPages = getCurrentPages()
            const page = currentPages.pop()
            // console.log(page)
            return wx.redirectTo({
              url: '/pages/login/index?redirectUrl=' + page.route,
            });
          }
          if (data.data.code === 10000) {
            //更换token成功
            app.setToken('token', data.data.data.token)
            app.setToken('refreshToken', data.data.data.refreshToken)
            //继续完成上一次没有完成的请求
            const config = Object.assign(res.config, {
              header: { Authorization: 'Bearer ' + data.data.data.token }
            })
            return http(config)
          }
        },
        fail: (err) => {
          console.log(err);
        }
      })
    }
    // if (code === 401) {
    //   const app = getApp()
    //   console.log(app.refreshToken);
    //   console.log(app.token);
    //   const res1 = await http({
    //     url: '/refreshToken',
    //     method: 'post',
    //     header: {
    //       Authorization: 'Bearer ' + app.refreshToken
    //     }
    //   })
    //   // console.log(res1)
    //   app.setToken('token', res1.token)
    //   app.setToken('refreshToken', res1.refreshToken)
    //   const config = Object.assign(res.config, {
    //     header: { Authorization: 'Bearer ' + res1.token }
    //   })
    //   return http(config)
    // }
    wx.utils.toast(message || '加载出错')
    return Promise.reject(message || '加载出错')
  }
}

// 挂载到 wx 全局命名空间
wx.http = http

// 也可作为模块导出
export default http